home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / DATABASE / OBJ1_2.ZIP;1 / C_BOX.PRG < prev    next >
Encoding:
Text File  |  1993-01-21  |  5.1 KB  |  167 lines

  1. //*****************************************************************************
  2. // C_Box.prg
  3. // Box class for OBJECT v2.03
  4. // Copyright (c) 1991, JHK, JHK-Software, Piestany
  5. // Compile with: /N/M/W/A
  6. //-----------------------------------------------------------------------------
  7.  
  8. #include "Box.ch"
  9. #include "SetCurs.ch"
  10. #include "Object.ch"
  11.  
  12. create class Box from Loc
  13.   export:
  14.   var Name    // ""
  15.   var RowSize // MaxRow()-7
  16.   var ColSize // MaxCol()-9
  17.   var Color   // m->Color:Edit
  18.   var Shadow  // true
  19.   method New=BoxNew              //o:New()
  20.   method Init=BoxInit            //o:Init(Name,R,C,Rs,Cs,Clr,Shadow)
  21.   method GoodInit=BoxGoodInit    //o:GoodInit(Name,R,C,Rs,Cs,CurSize,Clr,Shadow)
  22.   method Paint=BoxPaint          //o:Paint(IsTop,lDouble)
  23.   method SayTitle=BoxSayTitle    //o:SayTitle(IsTop)
  24.   method Scroll=BoxScroll        //o:Scroll(dRow)
  25.   method Done=BoxDone            //o:Done()
  26.   endclass
  27.  
  28.  
  29. //*****************************************************************************
  30. // Box:New() --> self
  31. // initialize new object
  32. //
  33. constructor BoxNew()
  34.   ::Name:= ""
  35.   ::RowSize:= MaxRow()-7
  36.   ::ColSize:= MaxCol()-9
  37.   ::Color:= m->Color:Edit
  38.   ::Shadow:= true
  39.   return(self)
  40.  
  41.  
  42. //*****************************************************************************
  43. // Box:Init(Name,R,C,Rs,Cs,Clr,Shadow) --> true
  44. // initialize new box.
  45. //
  46. method function BoxInit(Name,R,C,Rs,Cs,Clr,Shadow)
  47.   ::super(Loc):Init(R,C)
  48.   store value Name into ::Name
  49.   store value Rs into ::RowSize
  50.   store value Cs into ::ColSize
  51.   store value Clr into ::Color
  52.   store value Shadow into ::Shadow
  53.   if m->tColor==0; ::Shadow:=false; endif
  54.   return(true)
  55.  
  56.  
  57. //*****************************************************************************
  58. // Box:GoodInit(Name,R,C,Rs,Cs,CurSize,Clr,Shadow) --> true
  59. // initialize new box.
  60. //
  61. method function BoxGoodInit(Name,R,C,Rs,Cs,CurSize,Clr,Shadow)
  62.   local S
  63.   ::Row:=Row()
  64.   ::Col:=Col()                    //⁄ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒø
  65.   ::RowSize:=MaxRow()/2           //≥for menu use, you must set cursor            ≥
  66.   ::ColSize:=MaxCol()/2           //≥into right corner of current item            ≥
  67.   default CurSize to 1            //≥CurSize is current item column size (ColSize)≥
  68.   S:=if(CurSize<=0,1,0)           //≥for positioning around physical cursor       ≥
  69.   if CurSize<0; CurSize:=0; endif //≥set CurSize<=0                               ≥
  70.   ::super(Loc):Init(R,C)          //¿ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒŸ
  71.   store value Name into ::Name
  72.   store value Rs into ::RowSize
  73.   store value Cs into ::ColSize
  74.   store value Clr into ::Color
  75.   store value Shadow into ::Shadow
  76.   if m->tColor==0; ::Shadow:=false; endif
  77.   R:=::Row
  78.   C:=::Col
  79.   Rs:=::RowSize
  80.   Cs:=::ColSize
  81.   if (C+Cs+2)>MaxCol()             //try right
  82.     if (C-CurSize-Cs+S-3)<0        //right fail, try left
  83.       C:=Int((MaxCol()-Cs-1)/2)    //left fail, make centre
  84.       fill empty S with 1
  85.     else
  86.       C-=(CurSize+Cs-S+3)    //left ok.
  87.     endif
  88.   else
  89.     C++    //right ok.
  90.   endif
  91.   if (R+Rs+1+S)>=MaxRow()          //try down
  92.     if (Rs+1)>=(R-S)               //down fail, try up
  93.       R:=Int((MaxRow()-Rs-3)/2+1)  //up fail, make centre
  94.     else
  95.       R-=(Rs+1+S)   //up ok.
  96.     endif
  97.   else
  98.     R+=S            //down ok.
  99.   endif
  100.   if R<0 or R+Rs+1>MaxRow()-1; R:=Int((MaxRow()-Rs-3)/2+1); endif
  101.   if C<0 or C+CS+1>MaxCol();   C:=Int((MaxCol()-Cs-1)/2);   endif
  102.   ::Row:=R
  103.   ::Col:=C
  104.   return(true)
  105.  
  106.  
  107. //*****************************************************************************
  108. // Box:Paint(IsTop,lDouble) --> true
  109. // physically write box into screen.
  110. //
  111. method function BoxPaint(IsTop,lDouble)
  112.   local BFrame
  113.   local R:=::Row
  114.   local C:=::Col
  115.   local R2:=R+::RowSize+1
  116.   local C2:=C+::ColSize+1
  117.   local Clr:=::Color
  118.   default IsTop to true
  119.   default lDouble to IsTop
  120.   BFrame:=if(lDouble, B_DOUBLE, B_SINGLE)
  121.   @ R,C,R2,C2 box BFrame+" " color Clr
  122.   ::SayTitle(IsTop)
  123.   if ::Shadow
  124.     BoxShadow(R,C,R2,C2,ListAsArray(Clr)[nShadow])
  125.   endif
  126.   return(true)
  127.  
  128.  
  129. //*****************************************************************************
  130. // Box:SayTitle(IsTop) --> true
  131. // refresh window name
  132. //
  133. method function BoxSayTitle(IsTop)
  134.   local Name,Clr,Curs
  135.   default IsTop to true
  136.   Curs:=SetCursor(SC_NONE)
  137.   Clr:=::Color
  138.   if !Empty(::Name) and ::ColSize>=9
  139.     @ ::Row,::Col+4 say "[" color Clr
  140.     DevOut(" "+Left(::Name,::ColSize-10)+" ",ListAsArray(Clr)[if(IsTop,nTitle,nNormal)])
  141.     DevOut("]",Clr)
  142.   endif
  143.   SetCursor(Curs)
  144.   return(true)
  145.  
  146.  
  147. //*****************************************************************************
  148. // Box:Scroll(dRow) --> true
  149. // scroll inside the box
  150. //
  151. method function BoxScroll(dRow)
  152.   default dRow to 1
  153.   SetColor(::Color)
  154.   Scroll(::Row+1,::Col+1,::Row+::RowSize,::Col+::ColSize,dRow)
  155.   return(true)
  156.  
  157.  
  158. //*****************************************************************************
  159. // Box:Done() --> true
  160. // destroy the box.
  161. //
  162. method function BoxDone()
  163.   return(true)
  164.  
  165. //------------------------------------------------------- eof (c)JHK ----------
  166.  
  167.